<?php

include_once 'objects/AbstractObject.inc';
include_once 'objects/Permiso.inc';

class User extends AbstractObject {

    public $tabla = "usuarios";
    public $logged = false;
    private $permiso = null;

    /**
     * Inicia la sesion con el usuario y clave dados.
     * 
     * @return boolean <b>true</b> en caso de exito.
     * <b>false</b> en caso de error.
     */
    public function login() {
        $this->msg = "Usuario o Clave Incorrecta";
        $dbuser = $this->getAllBy("nombre", $this->nombre);
        if (!empty($dbuser)) {
            if ($dbuser[0]->clave === $this->clave) {
                $this->setData($dbuser[0]->getData());
                $this->logged = true;
                $this->msg = null;
            }
        }
        return $this->logged;
    }

    /**
     * Verifica si la sesion es valida.
     * 
     * @return boolean <b>true</b> en caso de exito.
     * <b>false</b> en caso de error.
     */
    public function isLogged() {
        if ($this->logged) {
            $this->logged = $this->login();
        }
        return $this->logged;
    }

    /**
     * Devuelve los privilegios del usuario.
     * 
     * @return Privilegio Privilegios del usuario.
     */
    public function getPermiso() {
        if ($this->permiso === null) {
            $this->permiso = Permiso::EId($this->permiso_id);
        }
        return $this->permiso;
    }

    /**
     * Encripta y almacena la clave.
     * 
     * @param string $clave
     */
    public function rawClave($clave) {
        $this->clave = md5($clave);
    }

    protected function prepare_insert() {
        $this->rawClave($this->clave);
        parent::prepare_insert();
    }

    protected function prepare_update() {
        $this->rawClave($this->clave);
        parent::prepare_update();
    }

}

?>
